package seqlist.link.leetcode;

/**
 * @author yuisama
 * @date 2023/03/16 19:19
 **/
public class Num203_RemoveElements {
    // 虚拟头结点法
//    public ListNode removeElements(ListNode head, int val) {
//        // 1.base case
//        if(head == null) {
//            return null;
//        }
//        ListNode dummyHead = new ListNode();
//        // 将虚拟头结点和原链表建立联系
//        dummyHead.next = head;
//        // prev一定指向值不为val的节点
//        ListNode prev = dummyHead;
//        while(prev.next != null) {
//            if(prev.next.val == val) {
//                prev.next = prev.next.next;
//            }else {
//                prev = prev.next;
//            }
//        }
//        return dummyHead.next;
//    }
    // 递归法
    public ListNode removeElements(ListNode head, int val) {
        // 1.base case
        if(head == null) {
            return null;
        }
        // 先把以head.next为头节点的子链表中所有值为val的删除完毕！
        head.next = removeElements(head.next,val);
        // 最后处理头节点是否需要删除即可
        return head.val == val ? head.next : head;
    }
}